Within a computational system such as a database, it is desirable for participants to cooperate to accomplish certain tasks, particularly in an object-oriented database system.
In an object-oriented database system, the database is considered a collection of objects, each object representing a real world entity or concept being modeled by the database. Database objects maintain the properties or attributes of the real world objects they model. They are able to communicate by passing "messages" and to perform operations such as computations or data updates. Objects may work together within a single database or across multiple databases.
For database objects to cooperate to perform tasks, it is important that they interact properly. One possibility is to have a central point of control, or a centralized "object manager", that ensures that interacting objects do so correctly. For the most part, however, there has not been any way for a computational system to ensure that "autonomous" objects--objects in a system without a single point of control--interact in the desired manner. Since the system itself is unable to guarantee reliable object interaction, users must "trust" that object interaction will occur as planned.
Therefore many possible useful object interactions do not take place because users lack confidence that they will take place reliably. One example is a situation requiring "referential integrity." Referential integrity is required where an application program involving references to someone else's remote objects requires the continued existence of those referenced remote objects to be guaranteed. While the database administrator (DBA) attempts to maintain such objects, they still may inadvertently be deleted. As a result, developers are reluctant to develop an application for which they do not have total ownership of all required objects. Such a restriction substantially limits the range of possible application programs.
Another example of the need for reliable object interaction is software reuse. Software designers may decide to save time by using another's remote objects. When they attempt to use those objects, however, they learn that their owners have changed or deleted them.
Many object-oriented design methodologies depend upon object cooperations that, in practice, are not trusted to take place reliably. As a result, the risk associated with depending upon such interactions limits the amount of cooperation or reuse that will actually take place.